Serialization এর সময় Dynamic Filtering কনফিগার করা

@JsonFilter এবং Dynamic Filtering - জ্যাকসন অ্যানোটেশন (Jackson Annotations) - Java Technologies

296

Jackson-এর Dynamic Filtering একটি শক্তিশালী বৈশিষ্ট্য যা ব্যবহারকারীদের JSON Serialization প্রক্রিয়া চলাকালীন কনফিগারযোগ্যভাবে নির্দিষ্ট ফিল্ডগুলোর অন্তর্ভুক্তি বা বাদ দেওয়ার সুযোগ দেয়। এর মাধ্যমে, নির্দিষ্ট সময়ে (যেমন, API কলের সময়ে) কোন ফিল্ডগুলো JSON-এ অন্তর্ভুক্ত করা হবে তা নির্ধারণ করা যায়।

Jackson-এ Dynamic Filtering করার জন্য @JsonFilter এবং FilterProvider ব্যবহৃত হয়।


Dynamic Filtering-এর প্রয়োজনীয়তা

Dynamic Filtering প্রয়োজন হয় যখন:

  1. আপনি কিছু ফিল্ড সাধারণত JSON আউটপুটে অন্তর্ভুক্ত করতে চান, তবে কিছু ক্ষেত্রে সেগুলি বাদ দিতে চান।
  2. আপনি একটি একক ক্লাসের উপর বিভিন্ন ধরনের ফিল্টার প্রয়োগ করতে চান নির্দিষ্ট কন্ডিশনের উপর ভিত্তি করে।
  3. আপনি field-based বা attribute-based filter প্রয়োগ করতে চান।

@JsonFilter Annotation

@JsonFilter অ্যানোটেশনটি Jackson এর মধ্যে ফিল্টার ব্যবস্থাপনা করতে ব্যবহৃত হয়। এটি একটি নাম নির্ধারণ করে, যা পরে JSON সিরিয়ালাইজেশনের সময় নির্দিষ্ট ফিল্ডকে include বা exclude করার জন্য ব্যবহৃত হয়।

ধাপ ১: @JsonFilter ব্যবহার করা

  1. @JsonFilter অ্যানোটেশনটি ক্লাসে ব্যবহার করা হয়।
  2. ফিল্টারের নাম নির্ধারণ করতে হয়।

উদাহরণ:

import com.fasterxml.jackson.annotation.JsonFilter;

@JsonFilter("userFilter")
public class User {
    private int id;
    private String name;
    private String email;
    
    // Constructors
    public User(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }
    
    // Getters and Setters
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
  • এখানে, User ক্লাসে @JsonFilter("userFilter") অ্যানোটেশন ব্যবহার করা হয়েছে, যা পরে ফিল্টার প্রয়োগ করার সময় ব্যবহার করা হবে।

ধাপ ২: SimpleBeanPropertyFilter এবং FilterProvider ব্যবহার করে Dynamic Filtering কনফিগার করা

Jackson-এ Dynamic Filtering বাস্তবায়ন করতে, আপনাকে SimpleBeanPropertyFilter এবং FilterProvider ব্যবহার করতে হবে। এই দুটি ক্লাস ফিল্টার কনফিগার করতে ব্যবহৃত হয়।

কোড উদাহরণ:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;

public class DynamicFilteringExample {
    public static void main(String[] args) throws Exception {
        User user = new User(1, "John Doe", "john.doe@example.com");

        // Create ObjectMapper instance
        ObjectMapper mapper = new ObjectMapper();

        // Create the filter
        SimpleFilterProvider filters = new SimpleFilterProvider();
        filters.addFilter("userFilter", SimpleBeanPropertyFilter.filterOutAllExcept("id", "name"));

        // Apply the filter during serialization
        String json = mapper.writer(filters).writeValueAsString(user);

        // Print JSON output
        System.out.println(json);
    }
}

JSON Output (with dynamic filtering):

{
  "id": 1,
  "name": "John Doe"
}

ব্যাখ্যা:

  • SimpleBeanPropertyFilter.filterOutAllExcept("id", "name") ব্যবহার করে User অবজেক্টের id এবং name ফিল্ডগুলিকে JSON আউটপুটে অন্তর্ভুক্ত করা হয়েছে এবং email ফিল্ডটি বাদ দেওয়া হয়েছে।
  • @JsonFilter("userFilter") এর মাধ্যমে ফিল্টারের নাম userFilter নির্ধারণ করা হয়েছে এবং এটি SimpleFilterProvider এর সাথে সংযুক্ত করা হয়েছে।

@JsonFilter এর অন্য সুবিধা

  1. Field Level Filtering:
    • @JsonFilter অ্যানোটেশনটি ব্যবহার করে আপনার ক্লাসে সব ফিল্ডের উপর dynamic filtering প্রয়োগ করা যায়, যা runtime-এ নির্ধারণ করা হয়।
  2. Runtime Filtering:
    • ফিল্টারটি runtime-এ নির্ধারণ করতে পারবেন, যা বিশেষ পরিস্থিতিতে ব্যবহৃত হতে পারে (যেমন, API কলের ভিত্তিতে নির্দিষ্ট ফিল্ডের প্রয়োজনীয়তা)।
  3. Multiple Filters:
    • আপনি একাধিক ফিল্টার কনফিগার করতে পারেন এবং প্রয়োজনে একাধিক ফিল্টারের সাথে কাজ করতে পারবেন। Jackson ফিল্টার ব্যবস্থাপনায় কাস্টম ফিল্টারিং সহজভাবে তৈরি করা সম্ভব।

Spring Boot এ Dynamic Filtering

Spring Boot এ Dynamic Filtering ব্যবহারের জন্য @JsonFilter অ্যানোটেশন এবং FilterProvider ব্যবহার করতে পারেন। Spring REST Controller-এ ফিল্টারিং করা যাবে।

Spring Boot Controller Example:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter;
import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @GetMapping("/user")
    public String getUser() throws Exception {
        User user = new User(1, "John Doe", "john.doe@example.com");

        // Create ObjectMapper instance
        ObjectMapper mapper = new ObjectMapper();

        // Create the filter
        SimpleFilterProvider filters = new SimpleFilterProvider();
        filters.addFilter("userFilter", SimpleBeanPropertyFilter.filterOutAllExcept("id", "name"));

        // Apply the filter during serialization
        return mapper.writer(filters).writeValueAsString(user);
    }
}

API Response (with dynamic filtering):

{
  "id": 1,
  "name": "John Doe"
}

@JsonFilter এবং @JsonIgnore এর মধ্যে পার্থক্য

বৈশিষ্ট্য@JsonFilter@JsonIgnore
ব্যবহারDynamic Filtering (Runtime Control)স্ট্যাটিকভাবে ফিল্ড বা প্রপার্টি বাদ দেওয়ার জন্য
ফিল্ড লেভেলহ্যাঁ, এটি ম্যানুয়ালি কনফিগার করা যায়সরাসরি কোনো ফিল্ডে প্রয়োগ করা যায়
ফিল্টারিং কনফিগারেশনফিল্টার Provider দিয়ে কাস্টম কনফিগার করা হয়সরাসরি @JsonIgnore দ্বারা বাদ দেওয়া হয়

  • Dynamic Filtering Jackson-এর একটি শক্তিশালী বৈশিষ্ট্য যা runtime-এ JSON ফিল্ডের অন্তর্ভুক্তি বা বাদ দেওয়ার সক্ষমতা প্রদান করে।
  • @JsonFilter অ্যানোটেশন এবং SimpleBeanPropertyFilter এর সাহায্যে নির্দিষ্ট ফিল্ডগুলোকে বাদ বা অন্তর্ভুক্ত করা যায়।
  • FilterProvider ব্যবহার করে ফিল্টার কনফিগারেশন নিয়ন্ত্রণ করা সম্ভব।
  • Spring Boot-এ @JsonFilter ব্যবহার করে API-তে dynamic JSON filtering সহজভাবে করা যায়।
Content added By
Promotion

Are you sure to start over?

Loading...